Список Задач + SQLite + Interface + DI
➡️Ссылка на репозиторий с кодом этого урока
Локальное хранилище
На предыдущем уроке мы провели важную подготовительную работу: применили принцип инверсии зависимостей, создав абстрактный интерфейс IStorageService
Мы сделали так, что наша ToDoViewModel больше не зависит от конкретной реализации хранилища (SharedPreferencesService), а только от "контракта"!
Заменим SharedPreferences, который хранит данные в простом формате "ключ-значение", на полноценную реляционную базу данных SQLite. Это более мощное и подходящее решение для хранения структурированных данных, таких как список задач
Цели:
- Создать новый сервис
SqliteService, который реализует тот же интерфейсIStorageService. - "Подменить" сервис в одной строке кода, не трогая
ViewModelи UI. - Понять преимущества использования баз данных для структурированной информации.
Что такое реляционная база данных
Реляционная база данных
Это способ хранения данных в виде набора взаимосвязанных таблиц.
Представьте себе обычную электронную таблицу, например, в Excel. Реляционная база данных использует очень похожую структуру.
- Таблицы (
Tables): Это основной строительный блок. Каждая таблица хранит информацию об одном конкретном типе объектов или сущностей, например, "Задачи" или "Настройки" - Столбцы (
Columns): Их также называют атрибутами или полями. Каждый столбец описывает одну характеристику сущности и имеет строгий тип данных (число, текст, дата и т.д.). Например, в нашей таблицеtasksбыли столбцы:id(число),text(текст) иisDone(число, представляющее булево значение) - Строки (
Rows): Их также называют записями. Каждая строка представляет один конкретный экземпляр сущности. Например, одна строка в таблицеtasksэто одна конкретная задача со своим уникальнымid, текстом и статусом выполнения
| id | text | isDone |
|---|---|---|
| 1 | Выучить Python | true |
| 2 | Купить GTA IV | false |
| 3 | Поспать | false |
| 4 | Отдохнуть | false |
| id | isDarkMode |
|---|---|
| 1 | false |
Добавление зависимостей
Для работы с SQLite в Flutter используется популярный пакет sqflite. Также понадобится пакет path для корректного определения пути к файлу базы данных на разных платформах
Откройте терминал в корне проекта и выполните команду:
flutter pub add sqflite path